home *** CD-ROM | disk | FTP | other *** search
-
-
-
- Tcl_Interp C Library Procedures Tcl_Interp
-
-
-
- _________________________________________________________________
-
- NNAAMMEE
- Tcl_Interp - client-visible fields of interpreter structures
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<ttccll..hh>>
-
- typedef struct {
- char *_r_e_s_u_l_t;
- Tcl_FreeProc *_f_r_e_e_P_r_o_c; |
- int _e_r_r_o_r_L_i_n_e;
- } Tcl_Interp;
-
- typedef void Tcl_FreeProc(char *_b_l_o_c_k_P_t_r); |
- _________________________________________________________________
-
-
- DDEESSCCRRIIPPTTIIOONN
- The TTccll__CCrreeaatteeIInntteerrpp procedure returns a pointer to a
- Tcl_Interp structure. This pointer is then passed into
- other Tcl procedures to process commands in the interpreter
- and perform other operations on the interpreter. Inter-
- preter structures contain many many fields that are used by
- Tcl, but only three that may be accessed by clients: |
- _r_e_s_u_l_t, _f_r_e_e_P_r_o_c, and _e_r_r_o_r_L_i_n_e. |
-
- The _r_e_s_u_l_t and _f_r_e_e_P_r_o_c fields are used to return results or |
- error messages from commands. This information is returned |
- by command procedures back to TTccll__EEvvaall, and by TTccll__EEvvaall back |
- to its callers. The _r_e_s_u_l_t field points to the string that |
- represents the result or error message, and the _f_r_e_e_P_r_o_c |
- field tells how to dispose of the storage for the string |
- when it isn't needed anymore. The easiest way for command |
- procedures to manipulate these fields is to call procedures |
- like TTccll__SSeettRReessuulltt or TTccll__AAppppeennddRReessuulltt; they will hide all |
- the details of managing the fields. The description below |
- is for those procedures that manipulate the fields directly. |
-
- Whenever a command procedure returns, it must ensure that |
- the _r_e_s_u_l_t field of its interpreter points to the string |
- being returned by the command. The _r_e_s_u_l_t field must always |
- point to a valid string. If a command wishes to return no |
- result then _i_n_t_e_r_p->_r_e_s_u_l_t should point to an empty string. |
- Normally, results are assumed to be statically allocated, |
- which means that the contents will not change before the |
- next time TTccll__EEvvaall is called or some other command procedure |
- is invoked. In this case, the _f_r_e_e_P_r_o_c field must be zero. |
- Alternatively, a command procedure may dynamically allocate |
- its return value (e.g. using mmaalllloocc) and store a pointer to |
- it in _i_n_t_e_r_p->_r_e_s_u_l_t. In this case, the command procedure |
- must also set _i_n_t_e_r_p->_f_r_e_e_P_r_o_c to the address of a procedure |
-
-
-
- Sprite v1.0 1
-
-
-
-
-
-
- Tcl_Interp C Library Procedures Tcl_Interp
-
-
-
- that can free the value (usually ffrreeee). If _i_n_t_e_r_p->_f_r_e_e_P_r_o_c |
- is non-zero, then Tcl will call _f_r_e_e_P_r_o_c to free the space |
- pointed to by _i_n_t_e_r_p->_r_e_s_u_l_t before it invokes the next com- |
- mand. If a client procedure overwrites _i_n_t_e_r_p->_r_e_s_u_l_t when |
- _i_n_t_e_r_p->_f_r_e_e_P_r_o_c is non-zero, then it is responsible for |
- calling _f_r_e_e_P_r_o_c to free the old _i_n_t_e_r_p->_r_e_s_u_l_t (the |
- TTccll__FFrreeeeRReessuulltt macro should be used for this purpose). |
-
- _F_r_e_e_P_r_o_c should have arguments and result that match the |
- TTccll__FFrreeeePPrroocc declaration above: it receives a single argu- |
- ment which is a pointer to the result value to free. In |
- most applications ffrreeee is the only non-zero value ever used |
- for _f_r_e_e_P_r_o_c. However, an application may store a different |
- procedure address in _f_r_e_e_P_r_o_c in order to use an alternate |
- memory allocator or in order to do other cleanup when the |
- result memory is freed. |
-
- As part of processing each command, TTccll__EEvvaall initializes |
- _i_n_t_e_r_p->_r_e_s_u_l_t and _i_n_t_e_r_p->_f_r_e_e_P_r_o_c just before calling the |
- command procedure for the command. The _f_r_e_e_P_r_o_c field will |
- be initialized to zero, and _i_n_t_e_r_p->_r_e_s_u_l_t will point to an |
- empty string. Commands that do not return any value can |
- simply leave the fields alone. Furthermore, the empty
- string pointed to by _r_e_s_u_l_t is actually part of an array of
- TTCCLL__RREESSUULLTT__SSIIZZEE characters (approximately 200). If a com-
- mand wishes to return a short string, it can simply copy it
- to the area pointed to by _i_n_t_e_r_p->_r_e_s_u_l_t. Or, it can use
- the sprintf procedure to generate a short result string at
- the location pointed to by _i_n_t_e_r_p->_r_e_s_u_l_t.
-
- It is a general convention in Tcl-based applications that
- the result of an interpreter is normally in the initialized
- state described in the previous paragraph. Procedures that
- manipulate an interpreter's result (e.g. by returning an
- error) will generally assume that the result has been ini-
- tialized when the procedure is called. If such a procedure
- is to be called after the result has been changed, then
- TTccll__RReesseettRReessuulltt should be called first to reset the result
- to its initialized state.
-
- The _e_r_r_o_r_L_i_n_e field is valid only after TTccll__EEvvaall returns a
- TTCCLL__EERRRROORR return code. In this situation the _e_r_r_o_r_L_i_n_e
- field identifies the line number of the command being exe-
- cuted when the error occurred. The line numbers are rela-
- tive to the command being executed: 1 means the first line
- of the command passed to TTccll__EEvvaall, 2 means the second line,
- and so on. The _e_r_r_o_r_L_i_n_e field is typically used in con-
- junction with TTccll__AAddddEErrrroorrIInnffoo to report information about
- where an error occurred. _E_r_r_o_r_L_i_n_e should not normally be
- modified except by TTccll__EEvvaall.
-
-
-
-
-
- Sprite v1.0 2
-
-
-
-
-
-
- Tcl_Interp C Library Procedures Tcl_Interp
-
-
-
- KKEEYYWWOORRDDSS
- free, initialized, interpreter, malloc, result
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sprite v1.0 3
-
-
-
-